/*
语法百题 解题报告：
 http://git.oschina.net/et0662/sznoi-grammar/ 
*/
#include<stdio.h>
int count, nFive, max;
int a[16];
void s(int n)
{
	int i;
	if(n==2*max)
	{
		if(nFive==0)
			count++;
	}
	else
	{
		for(i=0;i<=1;i++)
		{

			if(i==0)
			{
				if(nFive<max)
				{
					nFive++;
					a[n]=i;
					s(n+1);
					nFive--;
				}
			}
			else
			{
				if(nFive>0)
				{
					nFive--;
					a[n]=i;
					s(n+1);
					nFive++;
				}
			}
		}
	}
}

void dfs(int n)
{
	int i;
	if(n==2*max)
	{
		if(nFive==0)
		{
			for(i=0;i<2*max;i++)
				printf("%d ",a[i]);
			printf("\n");
		}
	}
	else
	{
		for(i=0;i<=1;i++)
		{

			if(i==0)
			{
				if(nFive<max)
				{
					nFive++;
					a[n]=i;
					dfs(n+1);
					nFive--;
				}
			}
			else
			{
				if(nFive>0)
				{
					nFive--;
					a[n]=i;
					dfs(n+1);
					nFive++;
				}
			}
		}
	}
}
int main(void)
{
	scanf("%d",&max);
	s(0);
	printf("%d\n",count);
	dfs(0);
	return 0;
}
